I attacked yet another side of this problem at one time. I have a FileType Class that takes care of search paths. A file type object might have a name like "Tiff Image Files for Application X's slide show". When you then ask for a file "image1.tiff" from a FileType, it will go through a sequence of paths looking for a file with that name. The Path can include compiled in paths if you have a subclass; a path that the Workspace Manager if the object were an App; a path variable in the environment whose name was specified when the object was created ... and you get the picture.
It saves a lot of work that is typical in systems where things move around a lot or might be in different places on different machines, or may have different versions that would be used under different circumstances.